import { createRouter, createWebHistory } from 'vue-router'
import commonRoutes from './commonRoutes.ts'
import doctorRoutes from './doctorRoutes.ts'
import userRoutes from './userRoutes.ts'
import { useAuthStore } from '@/stores/auth'

// 预加载404页面组件
import NotFound from '@/views/commonViews/abnormal/404.vue'

import type { RouteRecordRaw } from 'vue-router'

// 合并所有路由
const routes: RouteRecordRaw[] = [
  // 根路径重定向
  {
    path: '/',
    redirect: to => {
      const authStore = useAuthStore()
      const token = authStore.token
      const userType = authStore.userType

      if (!token) return '/login'
      return userType === 'doctor' ? '/doctor' : '/user'
    }
  },
  ...commonRoutes,
  ...doctorRoutes,
  ...userRoutes,
  // 404处理
  {
    path: '/:pathMatch(.*)*',
    name: 'NotFound',
    component: NotFound
  }
]

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes
})

// 路由守卫（权限控制）
router.beforeEach((to, from, next) => {
  const authStore = useAuthStore()
  const token = authStore.token
  const userType = authStore.userType
  const requiresAuth = to.meta.requiresAuth

  // 公共路由直接放行（登录、注册、404页面）
  if (requiresAuth === false) return next()

  // 处理页面刷新时的路由请求
  // 检查是否是API路径请求（通常是页面刷新时浏览器直接请求API路径）
  if (to.path.includes('/doctor/') || to.path.includes('/user/')) {
    // 如果是API路径但没有token，重定向到登录页
    if (!token) {
      console.log('检测到API路径请求，但无有效token，重定向到登录页')
      return next('/login')
    }

    // 如果有token，检查用户类型与请求路径是否匹配
    if ((to.path.includes('/doctor/') && userType !== 'doctor') ||
        (to.path.includes('/user/') && userType !== 'user')) {
      console.log('用户类型与请求路径不匹配，重定向到对应首页')
      return next(userType === 'doctor' ? '/doctor' : '/user')
    }

    // 如果是直接访问API路径（如刷新页面），确保路由正确加载
    if (to.matched.length === 0) {
      // 根据用户类型重定向到对应首页
      return next(userType === 'doctor' ? '/doctor' : '/user')
    }
  }

  // 需要权限但没有token，跳转到登录页
  if (requiresAuth && !token) {
    console.log('需要权限但无有效token，重定向到登录页')
    return next('/login')
  }

  // 权限校验逻辑 - 检查用户类型与路由是否匹配
  if (to.meta.role && userType !== to.meta.role) {
    // 用户类型与路由不匹配，跳转到对应用户类型的首页
    console.log('用户类型与路由不匹配，重定向到对应首页')
    return next(userType === 'doctor' ? '/doctor' : '/user')
  }

  // 通过权限验证
  next()
})

export default router
